// 当函数名大写，构造函数
// js 函数就可以构造一个类
// js 早期没有 class关键字，但并不影响它做java的传统面向对象编程
// js 其实没有类 
// 函数是一等对象，可以用来构造对象
function Cat(name) {//构造函数，构造对象的函数；
    // 给一组对象添加属性
    this.name = name;
    // 方法 内存开销 复杂得多 入栈，分配堆内存
    // this.makeSound = function () {
    //     console.log('喵喵喵');
    // }不建议这么写
}
// 函数也是对象,js函数对象上有prototype原型属性
// 公有的方法放在prototype属性上
Cat.prototype.makeSound = function () {
    console.log('喵喵喵');
}
Cat.sayHi = function () {
    console.log('Hi')
}
// 同一组对象 共同的类属性、方法 模板
var xm = new Cat('猫');
console.log(xm.name);
xm.makeSound();
console.log(Cat.prototype);
//xm.sayHi()//不能调用
// var xh = new Cat('花');
// console.log(xm.constructor == xh.constructor);//true
// 判断对象是某类的实例 instanceof
// console.log(xm instanceof Cat);
// let a ={};// 对象字面量的构造函数 Object
// let obj =new Object();
// Object 即是对象又是函数
